void main() {
//
  print('********* 1.不指定类型 *************');
  List l1 = [20, '张三', true];

//
  print('********* 2.指定类型集合 *************');
  List l2 = <String>['张三', '李四'];

  List<String> l3 = ['张三', '李四'];

//
  print('********* 3.指定长度list *************');
  List l4 = List<bool>.filled(2, true);
  // l4.add(true); 长度不可变 ❌
  print(l4);

//
  print('********* 4.属性 *************');
  List l5 = [1, 2, 3];
  print(l5.length);
  print(l5.isEmpty);
  print(l5.isNotEmpty);
  print(l5.reversed); // 反转list (3,2,1) 什么数据类型？

//
  print('********* 5.方法 *************');
  List l6 = [1, 2, 3];

  print('==== add 添加元素，只能一个=======');
  l6.add(4);
  print(l6);

  print('==== addAll 拼接list=======');
  l6 = [1, 2, 3];
  l6.addAll([4, 5]);
  print(l6);

  print('==== toList 转为list=======');
  l6 = [1, 2, 3];
  List l7 = l6.reversed.toList();
  print(l7);

  print('==== indexOf 查找元素索引=======');
  l6 = [1, 2, 3];
  int index = l6.indexOf(2);
  int index2 = l6.indexOf(20);
  print(index); // 返回索引 1
  print(index2); // 查找不到 返回 -1

  print('==== remove 根据元素删除=======');
  l6 = [1, 2, 3];
  l6.remove(2);
  print(l6);

  print('==== removeAt 根据索引删除=======');
  l6 = [1, 2, 3];
  l6.removeAt(0);
  print(l6);

  print('==== fillRange  和js splice 一样=======');
  l6 = [1, 2, 3];
  l6.fillRange(0, 2, 200);
  print(l6);

  print('==== insert 在索引前插入一个元素 =======');
  l6 = [1, 2, 3];
  l6.insert(1, 200);
  print(l6);

  print('==== insertAll 在索引前插入多个元素=======');
  l6 = [1, 2, 3];
  l6.insertAll(1, [200, 300]);
  print(l6);

  print('==== join 转为字符串=======');
  l6 = [1, 2, 3];
  String str = l6.join(',');
  print(str);
  print(str is String);

  print('==== split 转为list=======');
  l6 = '1-2-3'.split('-');
  print(l6);
  print(l6 is List);

  List arr = ['张三', '李四', '王五'];
  print('==== forEach 接受一个参数 ==== ');
  arr = ['张三', '李四', '王五'];
  arr.forEach((item) {
    print(item);
  });

  print('====  map 接受一个参数，返回的不是list ==== ');
  arr = ['张三', '李四', '王五'];
  var newArr = arr.map((item) {
    return item + '?';
  });
  print(newArr);
  print(newArr.toList());

  print('==== where 和 js filter类似 ,返回的不是list ==== ');
  arr = [1, 2, 3, 4, 5];
  var whereArr = arr.where((item) {
    return item >= 4;
  });
  print(whereArr);
  print(whereArr.toList());

  print('==== any 和 js some 类似  ==== ');
  arr = [1, 2, 3, 4, 5];
  bool anyFlag = arr.any((item) {
    return item >= 4;
  });
  print(anyFlag);

  print('==== every 和 js every 类似  ==== ');
  arr = [1, 2, 3, 4, 5];
  bool everyFlag = arr.every((item) {
    return item >= 4;
  });
  print(everyFlag);

  print('==== 箭头函数  只能写一行代码，很鸡肋 ==== ');
  arr.every((item) => item >= 4);
}
